#include <iostream>
#include <thread>

class A {
private:
    friend void thread_fool();  // 定义一个友元函数，用于访问该类内的私有成员和私有函数
    void foo() {
        std::cout << "Hello" << std::endl;
    }
};

void thread_fool() {
    std::shared_ptr<A> a = std::make_shared<A>();
    std::thread t1(&A::foo, a);  // 如果不定义友元函数，则这里无法访问私有函数

    t1.join();   // 这里如果不用，则报错terminate called without an active exception
    // 意思是子线程还没结束，子线程就销毁退出了，就会报错
    // 因此要使用join，让主线程等子线程结束后再退出
}

int main() {

    thread_fool();

    return 0;
}